import QtQuick 1.1
import com.nokia.symbian 1.1
import com.nokia.extras 1.1

import "logicaObject.js" as LogicaObject

Grid {
    id: grdTabuleiro
    width: childrenRect.width; height: childrenRect.height
    columns: 4
    spacing: 4    
    z: 1
    transformOrigin: Item.TopLeft

    property string keyObject : ""
    property InfoBanner info
    property Dialog dlgFim

    signal moveComplete()

    function mover(item, numero) {
        var obj = LogicaObject.instancias[grdTabuleiro.keyObject];
            var podeMover = obj.mover(numero);
            if (!podeMover[0]) {
                if (!root.apresentacaoSomente) {
                    if (info) {
                        info.text = qsTr("_peca_nao_pode_ser_movida_");
                        info.open();
                    }
                    item.naoPode();
                }
            } else {
                var posItemOrigem =
                    (podeMover[1][2][0] + 1) //linha do numero - começa em 0
                    * podeMover[1][1][1] // colunas totais
                    - podeMover[1][1][1] // colunas totais
                    + podeMover[1][2][1]; // coluna do número
                var posItemDestino =
                    (podeMover[2][2][0] + 1) //linha do numero - começa em 0
                    * podeMover[2][1][1] // colunas totais
                    - podeMover[2][1][1] // colunas totais
                    + podeMover[2][2][1]; // coluna do número
                grdTabuleiro.moverQuadrado(posItemOrigem, posItemDestino)
                if (obj.finalJogo() && !root.apresentacaoSomente) {
                    if (info) {
                        info.text = qsTr("_fim_jogo_");
                        info.open();
                    }
                    if  (dlgFim)
                        dlgFim.open();
                }
            }
        }

    function moverQuadrado(origem, destino) {
        var xO = grdTabuleiro.children[origem].x + grdTabuleiro.x;
        var yO = grdTabuleiro.children[origem].y + grdTabuleiro.y;
        var xD = grdTabuleiro.children[destino].x + grdTabuleiro.x;
        var yD = grdTabuleiro.children[destino].y + grdTabuleiro.y;
        var objOrigem = grdTabuleiro.children[origem];
        var objDestino = grdTabuleiro.children[destino];
        objOrigem.esconder(0.1);
        objDestino.esconder(0.1);
        var comp = Qt.createComponent("NumPeca.qml");
        var objO = comp.createObject(root);        
        objO.scale = grdTabuleiro.scale;
        objO.visible = false;
        objO.numero = objOrigem.numero;
        objO.x = Math.ceil(xO * grdTabuleiro.scale);
        objO.y = Math.ceil(yO *grdTabuleiro.scale);
        objO.visible = true;
        objO.mover(Math.ceil(xD * grdTabuleiro.scale), Math.ceil(yD * grdTabuleiro.scale));
        objO.moveCompleted.connect(function(x, y) {
                                       objO.esconder(0);
                                       objO.destroy();
                                       grdTabuleiro.carregarGrid();
                                       objDestino.mostrar();
                                       objOrigem.mostrar();
                                       grdTabuleiro.moveComplete();
                                   });
    }

    function desenhar() {
        var objLogica = LogicaObject.instancias[grdTabuleiro.keyObject];
        for(var i = 0; i < objLogica.cartas.length; i++) {
            var comp = Qt.createComponent("NumPeca.qml");
            if (comp.errorString() === "") {
                var obj = comp.createObject(grdTabuleiro);
                obj.numero = objLogica.cartas[i];
                obj.click.connect(function(item, numero) { grdTabuleiro.mover(item, numero); });
            } else
                console.log(comp.errorString());
        }
    }

    function carregarGrid() {
        var objLogica = LogicaObject.instancias[grdTabuleiro.keyObject];
        for (var i = 0; i < objLogica.cartas.length; i++) {
            grdTabuleiro.children[i].numero = objLogica.cartas[i];
        }
    }
}
